/* Created on 07/05/2005 */
package br.ufmg.dees.insane.ui.rich.learn.learn_view.displacements_view.command;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.BorderFactory;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.SwingConstants;
import javax.swing.border.Border;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;

import br.ufmg.dees.insane.ui.rich.learn.learn_view.dialog.NewMatrixViewTableDialog;

/** Uma classe para a interface grafica dos TPs 10 a 12 
 * resolu��o de sistemas lineares pelos m�todos:
 * Gauss, Gauss Escalonado e por invers�o de A.
 *  
 * @author Camara, Luciana
 * @since 07/05/2005
 * @version 1.0 */
public class HypothesisPanel extends JPanel implements 
ActionListener, DocumentListener,TableModelListener
{ 
  private static final long serialVersionUID = 1L;

//componente para o titulo do trabalho 
  JLabel titulo;
  
  //componentes dos resultados
  private JTextArea quadroRes;
    
  //parametros das matrizes
  // matriz com os coeficientes do sistema
  private int ordem;
     
  // paineis com matrizes
  private  JPanel painel2, painelCentral1,painelCentral2,painelCentral3, painel1,painelI,painelX, painelD,paineltitulo;
       
  public HypothesisPanel(){}
  /** Construtor do painel principal do Frame
   * @param w largura da janela escolhida
   * @param h altura da janela escolhida
   * @param opMetodos lista de metodos a ser exibida   */
  public HypothesisPanel(int w,int h, int o, NewMatrixViewTableDialog dlg2, String Kname, NewMatrixViewTableDialog dlgD ,
		  String Dname, NewMatrixViewTableDialog dlg1 ,String Pname){
	  
  	ordem=o;
    //K = dlg2;
    
        
//	 Cria painel titulo
	paineltitulo =new JPanel();	
	Border titled = BorderFactory.createEtchedBorder();	
	paineltitulo.setBorder(titled);
	titulo=new JLabel("                      ELEMENT HYPOTHESIS                                             ");
	titulo.setFont(new Font("SansSerif",Font.BOLD,14));
	paineltitulo.add(titulo);
	
	// cria o painel do vetor P
	painel1 = new JPanel();
	Border etched = BorderFactory.createEtchedBorder();
	titled = BorderFactory.createTitledBorder(etched, Pname);
	painel1.setBorder(titled);
	painel1.setLayout(new BorderLayout());	
	JPanel spane = new JPanel();
	spane.setLayout(new BorderLayout());	
	spane.add(dlg1.getMatrixPanel(), "Center");
 	spane.revalidate();
 	spane.repaint();
 	painel1.add(spane, "Center");
 	
 	//cria painel igual
 	painelI = new JPanel();
 	painelI.setLayout(new BorderLayout());	
 	painelI.add(new JLabel ("=", SwingConstants.CENTER), "Center");
 	painelI.setPreferredSize(new Dimension(50, 250));
 	painelI.setMaximumSize(new Dimension(50, 250));
 	
// 	cria painel VEZES
 	painelX = new JPanel();
 	painelX.setLayout(new BorderLayout());	
 	painelX.add(new JLabel ("*", SwingConstants.CENTER), "Center");
 	painelX.setPreferredSize(new Dimension(50, 250));
 	painelX.setMaximumSize(new Dimension(50, 250));

//  cria o painel do vetor D
	painelD = new JPanel();
	titled = BorderFactory.createTitledBorder(etched, Dname);
	painelD.setBorder(titled);
	painelD.setLayout(new BorderLayout());	
	JPanel spaneD = new JPanel();
	spaneD.setLayout(new BorderLayout());	
	spaneD.add(dlgD.getMatrixPanel(), "Center");
	spaneD.revalidate();
	spaneD.repaint();
 	painelD.add(spaneD, "Center");
	
	// Painel para a matriz K
    painel2=new JPanel();
 	titled = BorderFactory.createTitledBorder(etched, Kname);
 	painel2.setBorder(titled);
 	painel2.setLayout(new BorderLayout());	
 	JPanel spaneK = new JPanel();
 	spaneK.setLayout(new BorderLayout());	
 	spaneK.add(dlg2.getMatrixPanel(), "Center");
 	spaneK.revalidate();
 	spaneK.repaint();
 	painel2.add(spaneK, "Center");
 	
// 	Painel que engloba os paineis P = K
	painelCentral1 = new JPanel();
	painelCentral1.setLayout(new BorderLayout());
	painelCentral1.add(painel1, "West"); 
	painelCentral1.add(painelI, "Center"); 
	painelCentral1.add(painel2, "East"); 
	
 	
// 	Painel que engloba os paineis D - F
	painelCentral2 = new JPanel();
	painelCentral2.setLayout(new BorderLayout());
	painelCentral2.add(painelD, "West"); 
	
	
    //Painel que engloba todos os paineis
	painelCentral3 =new JPanel();		
	painelCentral3.setLayout(new BorderLayout());
	painelCentral3.add(painelCentral1,"West"); // ocupa 2 colunas - 5 linhas	
	painelCentral3.add(painelX,"Center"); // ocupa 2 colunas - 5 linhas	
	painelCentral3.add(painelCentral2,"East"); // ocupa 2 colunas - 5 linhas
	Dimension d = new Dimension();
	d.width=600;
	d.height=200;

	
	
	JScrollPane pane =new JScrollPane(painelCentral3);
	pane.setPreferredSize(new Dimension(900,350));
	pane.setMaximumSize(new Dimension(900,350));
 	pane.createHorizontalScrollBar();
 	pane.createVerticalScrollBar();
 	pane.revalidate();
 	pane.repaint();
	
	
	setLayout(new BorderLayout());
	add(paineltitulo,"North");
	add(pane,"Center");
	setPreferredSize(new Dimension(900,350));
	setMaximumSize(new Dimension(900,350));
	
  }// fim de menuPanel-construtor
  
 
   /** Metodo para tratamento de valores inseridos em JTextField
   * @param e DocumentEvent capturado   */
  public void insertUpdate (DocumentEvent e) {
    try {
      validaDados(); 
    }
    catch (Exception ex){
    quadroRes.setText(ex.getMessage());
    }
  }
  /** Metodo para tratamento de valores removidos em JTextField
   * @param e DocumentEvent capturado   */
  public void removeUpdate (DocumentEvent e) {validaDados(); }
  /** Metodo para tratamento de valores alterados em JTextField
   * @param e DocumentEvent capturado   */
  public void changedUpdate (DocumentEvent e) {validaDados(); }
  
  /** Metodo para validacao e conversao dos campos tipo texto 
   * dos parametros digitados pelo usuario */
  public void validaDados()
  {    
            
    }
   
  	/** executa o m�todo escolhido
	 * @param evt  objeto com o evento escolhido 	 */
	public void actionPerformed(ActionEvent evt) 
	{
	 	
	}// fim de actionPerformed
	
		/** @param n numero de espa�os 
	* @return  uma string com n espacos */
	public String espacos(int n){
	  if (n<2)n=2;
	  String esp="";
	  for (int i=0;i<n;i++) esp+=" ";
	  return esp;
	}

  	/* (non-Javadoc)
  	 * @see javax.swing.event.TableModelListener#tableChanged(javax.swing.event.TableModelEvent)
  	 */
  	public void tableChanged(TableModelEvent e) {
	    //int row = e.getFirstRow();
	    //int column = e.getColumn();
	   // MyTableModel model = (MyTableModel)e.getSource();	    
	   // Object data = model.getValueAt(row, column);
	    
	  }
	
	
/** metodo para reinicializar uma matriz de objects 
 * @param va valor com o qual a matriz sera inicializado
* @return um matriz de ordemxordem reinicializada */
public Object[][] inicializaMatriz(double va){
  Double valor=new Double(va);
  Object[][] mat=new Object[ordem][ordem];
  for (int i=0;i<ordem;i++){
    for (int j=0;j<ordem;j++)mat[i][j]=(Object)valor;
  }
  return mat;  
}

/** metodo para reinicializar um vetor 
 * @param va valor com o qual o vetor sera inicializado
* @return um matriz de 1 coluna reinicializada */
public Object[][] inicializaVetor(double va){
  Double valor=new Double(va);
  Object[][] mat=new Object[ordem][1];
  for (int i=0;i<ordem;i++){
    mat[i][0]=(Object)valor;
  }
  return mat;  
}

/** Metodo para reinicializar o modelo de tabela 
 * @param mat nova matriz de objetos
* @param nc numero de colunas
* @param nl numero de linhas
* @return um novo modelo de tabela */
//public MyTableModel inicializaTabelaModelo(Object[][]mat,int nc,int nl){
 // MyTableModel tabModel=new MyTableModel(mat,nc,nl);
 // return tabModel;
//}

  
}// fim de MenuPanel



